package com.breaktian.assemble.schedule;

import com.breaktian.assemble.utils.LogUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;

/**
 * Created by breaktian on 2016/12/23.
 */

public class ScheduleUtils {

    private final static Object lockObj = new Object();

    private static ScheduleUtils instance;
    private final Timer mTimer;
    private List<CommonTask> tasks;

    private ScheduleUtils(){
        mTimer = new Timer();
        tasks = new ArrayList<CommonTask>();

    }

    public static ScheduleUtils get(){
        if(instance==null){
            synchronized (lockObj){
                if(instance==null){
                    instance = new ScheduleUtils();
                }
            }
        }
        return instance;
    }

    public void startSchedule(CommonTask commonTask,long intervalMillis){
        //从此计时器的任务队列中移除所有已取消的任务。
        mTimer.purge();
        //检查是否正在执行
        if(commonTask.isRunning()){
            LogUtil.e("此任务正在执行，如果要重新开始请先调用stopSchedule()");
            return;
        }
        //开始
        mTimer.scheduleAtFixedRate(commonTask,1,intervalMillis);
        tasks.add(commonTask);
    }
    public void startSchedule(CommonTask commonTask,long delayMillis,long intervalMillis){
        //从此计时器的任务队列中移除所有已取消的任务。
        mTimer.purge();
        //检查是否正在执行
        if(commonTask.isRunning()){
            LogUtil.e("此任务正在执行，如果要重新开始请先调用stopSchedule()");
            return;
        }
        LogUtil.e("开始执行");

        //开始
        mTimer.scheduleAtFixedRate(commonTask,delayMillis,intervalMillis);
        tasks.add(commonTask);
    }

    public void stopSchedule(CommonTask commonTask){
        if(commonTask==null){
            return;
        }
        tasks.remove(commonTask);
        commonTask.stop();
        //从此计时器的任务队列中移除所有已取消的任务。
        mTimer.purge();
    }
    public void stopSchedule(int id){
        for (CommonTask task:tasks) {
            if(id==task.getId()){
                tasks.remove(task);
                task.stop();
            }
        }
        //从此计时器的任务队列中移除所有已取消的任务。
        mTimer.purge();
    }

    public boolean isRunning(CommonTask commonTask){
        return commonTask.isRunning();
    }
    public boolean isRunning(int id){
        for (CommonTask task:tasks) {
            if(id==task.getId()){
                return task.isRunning();
            }
        }
        return false;
    }








}
